

function myBind () {
    var self = this
    var context = [].shift.call(arguments) // 绑定this的上下文
    var args = [].slice.call(arguments) // 剩余参数转化为数组


    // 讲两次传入的数组分别引入
    return function() {
        return self.apply(context,[].concat.call(args,[].slice.call(arguments)))
    }
}

Function.prototype.myBind = myBind

var obj = {
    name: "1",

}

var getName = function(a,b,c,d) {
    console.log(this.name);
    console.log([a,b,c,d]);
}.myBind(obj,1,2)

// console.log(getName()); // "1" , 1, 2

getName(3,4) //  "1" , 1, 2 , 3, 4